<?php
/****************************************************************
* MAGPHP Micro Framework										*
* Author by mag796fd											*
* MAIL: mag@magphp.com											*
* Website: http://www.magphp.com								*
****************************************************************/


//============================================
//框架系统函数集
//============================================

//自动加载【应用】中的所有类文件
function __autoload($classname){
	//Controller控制器自动加载
	$controller = $classname;
	$controllerFile = './'.APPNAME.'/Controller/'.$controller.'.php';
	if(is_file($controllerFile))
	{
		include($controllerFile); //载入类文件
		if( class_exists( $controller ) )
		{
		 	$controller = new $controller;
		}
	}

	//Model模型自动加载
	$model = $classname;
	$modelFile = './'.APPNAME.'/Model/'.$model.'.php';
	if(is_file($modelFile))
	{
		include($modelFile); //载入类文件
		if( class_exists( $model ) )
		{
		 	$model = new $model;
		}
	}
}


//数据库建立 
function DB($tempConfig=null){
	$configDB = Config::$configdata['DB'];
	if(isset($tempConfig))
	{
		$configDB = $tempConfig;
	}
	
	if(isset($configDB))
	{
		$db = new medoo($configDB);
		return $db;
	}
	else
	{
		die('错误：请配置数据库链接信息');
	}
}


//自定义Model方法
//目的：在正式输出模型数据前，加工这些数据，已达到希望显示的数据样式。比如sex字段1男、0女，输出后直接显示男性、女性。
//      或者直接输出一个默认选择了男或女的SELECT选择菜单的HTML代码。
//参数：要自定义model的数据库表的名称
function M($tableName)
{
	if(trim($tableName) != '')
	{
		//$db = Config::dbRun();
		$modelName = $tableName.'Model';
		$modelPath = './'.APPNAME.'/Model/'.$modelName.'.php';
		
		if(!class_exists($modelName,false))
		{
			if(file_exists($modelPath))
			{
				include($modelPath);
				$modelOBJ = null;
				$modelOBJ = new $modelName();
				return $modelOBJ;
			}
			else
			{
				die('错误：Model类文件不存在 - ['.$modelPath.']');
			}
		}
		else
		{
			$modelOBJ = null;
			$modelOBJ = new $modelName();
			return $modelOBJ;
		}
	}
	else
	{
		return false;
	}
}


//**********************************************************


//路由参数：★★★重要基础★★★
//获取c(控制器)和a(方法)参数值
//自动判断GET还是POST
function GETROUTE($name=null)
{
	$data = false;

	if( isset($_GET[$name]) )
	{
		if($_GET[$name]!='')
		{
			$data = $_GET[$name];
		}
	}
	else
	{
		if($_POST[$name]!='')
		{
			$data = $_POST[$name];
		}
	}
	return $data;
}


//判断本页是否为 伪静态模式
function URLTYPE()
{
	$retval = false;
	$urlARR = preg_split("[/]", $_SERVER['PHP_SELF']);
	$isExtNum = 0; //URL拆分后，xx.php的$key值
	foreach ($urlARR as $key => $val) 
	{
		unset($urlARR[$key]); //去掉前面
		$isExtNum = $key;
		if(preg_match("[\.php]", $val)) //如果当前是xx.php
		{
			break;
		}
	}
	//dump($urlARR);
	if(count($urlARR)>0)
	{
		$retval = true;
	}
	return $retval;
}


//URL组装，正向
//参数1：URL字符串
//参数2：是否使用伪静态模式
function U($urlStr='', $rewrite=false)
{
	$reUrl = APPDIR.'/'.APPFILE; //所在目录（子目录）和入口php文件

	//if(CONF('URLREWRITE') || $rewrite) 
	//框架是否启用伪静态模式
	//参数指定开始伪静态，就直接开启。
	//参数未指定伪静态，但是CONF设置开启了伪静态，则开启。
	$isif=false; //默认不适用伪静态
	if($rewrite)
	{
		$isif = true;
	}
	else
	{
		if(CONF('URLREWRITE'))
		{
			$isif = true;
		}
	}
	
	if($isif) //是伪静态
	{
		if($urlStr != '')
		{
			$urlARR = preg_split("[/]", $urlStr);
			//echo '【'.$urlStr.'】';
			//$urlARR = explode('/', $urlStr);
			//$urlARR = array_filter($urlARR); //去除空值
			//dump($urlARR);
			foreach ($urlARR as $key => $val) {
				$reUrl = $reUrl.'/'.$val;
			}
		}
	}
	else //不是伪静态
	{
		if($urlStr != '')
		{
			$urlARR = preg_split("[/]", $urlStr);
			//$urlARR = array_filter($urlARR); //去除空值
			//dump($urlARR);
			foreach ($urlARR as $key => $val) {
				if($key==0) //控制器
				{
					$reUrl .= '?c='.$val;
				}
				elseif($key==1) //方法
				{
					$reUrl .= '&a='.$val;
				}
				else //累加后面的参数
				{
					if( ($key%2) == 0) //偶数
					{
						$reUrl .= '&'.$val.'=';
					}
					else
					{
						$reUrl .= (string)$val;
					}
				}
			}
		}
	}

	return $reUrl;
}

//页面头信息输出
//服务器响应HTTP的类型ContentType大全
function PAGEHEAD($code='utf-8')
{
	if($code == '')
	{
		$code='utf-8';
	}
	return header("Content-type: text/html; charset=".$code);
}


//自动判断，并获得POST和GET的值
function I($name, $default='', $valtype=null)
{
	// 指定参数来源
	if(strpos($name,'.')) {
		list($method,$name) = explode('.',$name,2);
	}else{ // 默认为自动判断
		$method =   'param';
	}
	//判断获取方式类型
	switch(strtolower($method)) {
		case 'get'     :   $input =& $_GET;break;
		case 'post'    :   $input =& $_POST;break;
		case 'param'   :  
			switch($_SERVER['REQUEST_METHOD']) {
				case 'POST':
					$input  =  $_POST;
					break;
				default:
					$input  =  $_GET;
			}
			break;
		default:
			return NULL;
	}

	//空值判断
	if(isset($input[$name]) && $input[$name]!="") //是变量，且变量不为空
	{
		$data = $input[$name];
	}
	else
	{
		$data = isset($default)?$default:NULL;
	}

	//强制类型转换，默认string类型
	if($data && $valtype)
	{
		switch(strtolower($valtype)) {
			case 'int'			:	$data = (int)$data;break;
			case 'bool'			:	$data = (bool)$data;break;
			case 'double'		:	$data = (double)$data;break;
			case 'array'		:	$data = (array)$data;break;
			case 'object'		:	$data = (object)$data;break;
			default:
				$data = (string)$data;
		}
	}

	//自动类型转换
	// if($data && !$valtype)
	// {
	// 	$tmpdata = $data;
	// 	$doIn = true; //是否进入执行
	// 	//以下执行一条，其他条就不再执行
	// 	if($doIn && is_numeric($tmpdata) && (int)$tmpdata )			{ $data=(int)$data;	$doIn=false; }
	// 	if($doIn && is_numeric($tmpdata) && (bool)$tmpdata )		{ $data=(bool)$data;	$doIn=false; }
	// 	if($doIn && is_numeric($tmpdata) && (double)$tmpdata )		{ $data=(double)$data;	$doIn=false; }
	// 	if($doIn && is_array($tmpdata) && (array)$tmpdata )			{ $data=(array)$data;	$doIn=false; }
	// 	if($doIn && is_object($tmpdata) && (object)$tmpdata )		{ $data=(object)$data;	$doIn=false; }
	// }

	return $data;
}


//如果变量值为空或null，则为传入的默认值
function R($name, $default='')
{
	if(isset($name) && $name!="") //是变量，且变量不为空
	{
		$data = $name;
	}
	else
	{
		$data = isset($default)?$default:NULL;
	}
	return $data;
}


//文件缓存方法
//参数$value为NULL则为清空缓存
function F($name, $value='', $limitTime=null)
{
	//是否已经实例化
	if(!isset($fc) && class_exists('fcache'))
	{
		$fc = new fcache();

		if($value!=='') //设置缓存 或 删除缓存 （缓存类对象存在）
		{
			if(is_null($value)) //删除缓存
			{
				$fc->_unset($name);
			}
			else ////设置缓存
			{
				$fc->_set($name,$value,$limitTime);
			}
		}
		else //读取缓存
		{
			return $fc->_get($name);
		}
	}
	else
	{
		echo '没有fcache类';
	}

}


//读取config.php中的配置数据
//APP中的config.php数据，会覆盖/Lib/config.php中，相同key的数据
function CONF($name='',$newval=null)
{
	//临时设置配置项的值
	if($name!='' && isset($newval))
	{
		Config::$configdata[$name] = $newval; //配置项设置为新值
	}

	if($name == '')
	{
		return Config::$configdata; //返回全部
	}
	else
	{
		return Config::$configdata[$name]; //返回指定
	}
}


//COOKIE设置和读取
function COOKIE($name='', $value='', $limitTime=null)
{
	if(!$limitTime)
	{
		$limitTime = 3600*24*90; //90天记住登录
	}

	//删除
	if( is_null($name) )
	{
		//全删
		unset($_COOKIE);
	}
	elseif( $name!='' && is_null($value) )
	{
		//删除键值
		setcookie($name);
		unset($_COOKIE[$name]);
	}
	//设置
	elseif( $name!='' && $value!='' )
	{
		//将用户数据数组，转为STR格式
		$cookieSTR = serialize($value); //设置：array转string格式
		$cookieTimes = time()+$limitTime; //当前日期+生存天数
		setcookie($name,$cookieSTR,$cookieTimes);
		$_COOKIE[$name] = $cookieSTR; //词句设置后，COOKIE才可以立即读取到
	}
	//读取
	else
	{
		//读取COOKIE
		$cookieSTR = $_COOKIE[$name];
		$cookieARR = unserialize($cookieSTR); //读取：string转array
		return $cookieARR;
	}
}


//SESSION设置与读取
function SESSION($name='', $value='')
{
	//删除
	if( is_null($name) )
	{
		//全删
		unset($_SESSION);
		session_destroy();
	}
	elseif( $name!='' && is_null($value) )
	{
		//删除键值
		unset($_SESSION[$name]);
	}
	//设置
	elseif( $name!='' && $value!='' )
	{
		//将用户数据数组，转为STR格式
		$sessionSTR = serialize($value); //设置：array转string格式
		$_SESSION[$name] = $sessionSTR;
	}
	//读取键值
	elseif( $name!='' && $value=='' )
	{
		//读取单条session
		$sessionARR = $_SESSION[$name];

		if(is_array($sessionARR)) //如果是数组
		{
			//判断那条session是serialize()转换过的
			foreach ($sessionARR as $key => $val) {
				if(is_string($val))
				{
					//如果此条session是serialize()转换过的
					if( (stripos($val,'a:')!==false) || (stripos($val,'s:')!==false) || (stripos($val,'i:')!==false) )
					{
						$sessionARR[$key] = unserialize($val); //string转array
					}
				}
			}
			return $sessionARR;
		}
		else
		{
			//如果此条session是serialize()转换过的
			if( (stripos($sessionARR,'a:')!==false) || (stripos($sessionARR,'s:')!==false) || (stripos($sessionARR,'i:')!==false) )
			{
				$sessionARR = unserialize($sessionARR); //string转array
				return $sessionARR;
			}
			else
			{
				return $_SESSION[$name];
			}
		}		
	}
	//读取全部
	else
	{
		//读取全部
		if(isset($_SESSION))
		{
			$sessionARR = $_SESSION;
			//判断那条session是serialize()转换过的
			foreach ($sessionARR as $key => $val) {
				if(is_string($val))
				{
					//如果此条session是serialize()转换过的
					if( (stripos($val,'a:')!==false) || (stripos($val,'s:')!==false) || (stripos($val,'i:')!==false) )
					{
						$sessionARR[$key] = unserialize($val); //string转array
					}
				}
			}
			return $sessionARR;
		}
	}
}

//判断是否为POST操作
function IS_POST()
{
	if($_SERVER['REQUEST_METHOD'] == 'POST')
	{
		return true;
	}
	else
	{
		return false;
	}
}

//判断是否为GET操作
function IS_GET()
{
	if($_SERVER['REQUEST_METHOD'] == 'GET')
	{
		return true;
	}
	else
	{
		return false;
	}
}


//**********************************************************


//获取客户端真实IP
function GETIP()
{
	global $ip;

	if (getenv("HTTP_CLIENT_IP"))
		$ip = getenv("HTTP_CLIENT_IP");
	else if(getenv("HTTP_X_FORWARDED_FOR"))
		$ip = getenv("HTTP_X_FORWARDED_FOR");
	else if(getenv("REMOTE_ADDR"))
		$ip = getenv("REMOTE_ADDR");
	else $ip = "Unknow";

	return $ip;
}

//获得来源URL，用户下一个页面返回之用
//$gotourl=如果没有获得来源URL，则返回指定的URL
function GETBACKURL($gourl='', $jsback=false)
{
	if($gourl!='')
	{
		$backurl = $gourl;
	}
	else
	{
		if($jsback)
		{
			$backurl = "javascript:window.history.back();";
		}
		else
		{
			$backurl = $_SERVER['HTTP_REFERER']; //来源URL，也是返回键链接
		}
	}

	return $backurl;
}


/**
 * 浏览器友好的变量输出
 * @param mixed $var 变量
 * @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
 * @param string $label 标签 默认为空
 * @param boolean $strict 是否严谨 默认为true
 * @return void|string
 */
function dump($var, $echo=true, $label=null, $strict=true) {
    $label = ($label === null) ? '' : rtrim($label) . ' ';
    if (!$strict) {
        if (ini_get('html_errors')) {
            $output = print_r($var, true);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        } else {
            $output = $label . print_r($var, true);
        }
    } else {
        ob_start();
        var_dump($var);
        $output = ob_get_clean();
        if (!extension_loaded('xdebug')) {
            $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        }
    }
    if ($echo) {
        echo($output);
        return null;
    }else
        return $output;
}


//**********************************************************


//错误提示
//ajax模式返回JSON
function TOERROR($ismsg='', $isurl='', $istime=2, $notjump=false){
	return MESSAGEJUMP($ismsg, $isurl, $istime, 0, $notjump);
}


//正确提示
//ajax模式返回JSON
function TOSUCCESS($ismsg='', $isurl='', $istime=2, $notjump=false){
	return MESSAGEJUMP($ismsg, $isurl, $istime, 1, $notjump);
}


//提示条状公共方法（含成功提示、错误提示）
//ajax模式返回JSON
//types=0错误提示，types=1正确提示
//notjump 不跳转开关，默认关闭
function MESSAGEJUMP($ismsg='', $isurl='', $istime=0, $types=0, $notjump=false){
	$ajaxData = array();
	$outHTML = '';

	//设置默认等待时间
	if($istime == 0)
	{
		if($types==1)
		{
			$istime = 1; //正确提示等待1秒
		}
		else
		{
			$istime = 3; //错误提示（其他状态）等待3秒
		}
	}

	//设置默认提示语前缀
	$msgType = '';
	//设置文字颜色
	$msgColor = '#000000';
	if($types==1)
	{
		$msgType = '<div style="font-size:48px; padding:20px; padding-right:50px;">:)</div>'; //正确提示等待1秒
		$msgColor = '#0000FF';
	}
	else
	{
		$msgType = '<div style="font-size:48px; padding:20px; padding-right:50px;">:(</div>'; //错误提示（其他状态）等待3秒
		$msgColor = '#FF0000';
	}


	//如果是AJAX返回
	//php 判断是否为 ajax 请求
	if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest")
	{
		$ajaxData['types'] = $types;
		$ajaxData['message'] = $msgType.$ismsg;
		$ajaxData['url'] = $isurl;

		header('Content-Type:application/json; charset=utf-8');
		exit(json_encode($ajaxData));
	}
	else
	{
		if($ismsg == '') //没有提示语，直接跳转，不等待
		{
			if($isurl != '') //有跳转URL
			{
				//header('Location: '.$isurl); //目标页
				echo '<meta http-equiv="refresh" content="0;URL='.$isurl.'" />';
				exit();
			}
			else //无跳转URL
			{
				//$tmpurl = $_SERVER["HTTP_REFERER"]; //上一页
				//header('Location: '.$tmpurl);
				echo '<script type="text/javascript">history.back(-1)</script>';
				exit();
			}
		}
		else //有提示语，HTML输出提示，需要等待时间
		{	
			//****************************************************************************
			header("Content-Type: text/html; charset=utf-8"); //输出页头编码防止乱码******
			//****************************************************************************
			$outHTML .= '<!doctype html><html><head><meta charset="utf-8">'."\r\n";;
			$outHTML .= '<style type="text/css">.msgBoxStyle { border:2px solid #CCC; background-color:#EEE; padding:20px; text-align:center; font-size:32px; margin:20px; border-radius:20px; }</style>'."\r\n";
			//$outHTML .= '<script type="text/javascript">var msgTimeTxt = '.$istime.'; var intervalid = SetInterval(function(){ document.getElementById("msgTimeBox").innerHTML = msgTimeTxt-1; },1000);</script>';
			$outHTML .= '</head><body style="margin-top:50px; margin-left:100px; margin-right:100px;">'."\r\n";
			$outHTML .= '<h1 class="msgBoxStyle" style="text-align:center; color:'.$msgColor.';">'.$msgType.$ismsg."\r\n";
			if($notjump === false)
			{
				$outHTML .= '<span id="msgTimeBox">'.$istime.'秒后跳转……</span>'."\r\n";
			}
			else
			{
				//$outHTML .= '<br/><span id="msgLinkBox" style="font-size:14px; cursor:pointer;" onClick="javascript:parent.history.back();">&lt;&lt;返回上页</span>'."\r\n";
			}
			$outHTML .= '</h1>'."\r\n";

			if($notjump === false)
			{
				if($isurl != '') //有跳转URL
				{
					$outHTML .= '<meta http-equiv="refresh" content="'.$istime.';URL='.$isurl.'" />'."\r\n";
				}
				else //无跳转URL，JS返回上页
				{
					$outHTML .= '<script type="text/javascript">'."\r\n";
					$outHTML .= 'var dtime='.$istime.';'."\r\n";
					$outHTML .= 'var interval = setInterval(function(){'."\r\n";
					$outHTML .= '	if(dtime==0){ history.back(-1) }else{ dtime-- };'."\r\n";
					$outHTML .= '},1000);'."\r\n";
					$outHTML .= '</script>'."\r\n";
				}
			}
			//$outHTML .= '<hr/>';
			$outHTML .= '</body></html>';

			echo $outHTML;
			exit();
		}
	}
}


//错误提示，只显示不跳转
function ERROR($ismsg=''){
	return MESSAGEJUMP($ismsg, '', 0, 0, true);
}


//正确提示，只显示不跳转
function SUCCESS($ismsg=''){
	return MESSAGEJUMP($ismsg, '', 0, 1, true);
}


//无提示，直接跳转
function TOURL($isurl='')
{
	header('Location: '.$isurl);
	exit();
}


//判断是否ajax请求
function AJAXTYPE()
{
	if ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest' )
	{
		return true; //是AJAX请求
	}
	else
	{
		return false; //普通表单请求
	}
}


// 返回JSON数据格式到客户端 包含状态信息。（同$this->ajax() 一样的效果）
function AJAX($data=null)
{
	if($data!=null)
	{
		header('Content-Type:application/json; charset=utf-8');
		exit(json_encode($data));
	}
}


//**********************************************************


//多语言载入方法
//$name 显示内容的变量
//$remarks 是$name的备注，只是方便变成查看内容的值，暂时无其他用处
//$lang 指定语言类型
function LANG_BK($name='', $remarks='', $lang='')
{
	$retval = ''; //默认返回值
	
	//如果没有语言类型
	if($lang == '')
	{
		//读取 全局默认语言设置
		if(CONF('LANG_DEF') != '')
		{
			$lang = CONF('LANG_DEF');
		}
		else
		{
			$lang = 'DEF';
		}

		//是否指定语言
		if(SESSION('lang') != null)
		{
			$lang = SESSION('lang'); //如果使用了SETLANG($lang)方法，指定了语言
		}
	}

	//约定规则，统一转为大写
	$name = strtoupper(trim($name)); //去掉两边空格，并转为大写
	$lang = strtoupper(trim($lang)); //去掉两边空格，并转为大写

	if($name != '')
	{
		// 语言文件在 ./Lib/lang.php 文件中，如果文件存在，则已经由框架自动载入
		$retval = Lang::$langdata[$lang][$name]; //返回对应的语言值
	}

	return $retval;
}
function LANG($name='', $remarks='', $lang='')
{
	$retval = ''; //默认返回值
	
	//如果没有语言类型
	if($lang == '')
	{
		//读取 全局默认语言设置
		if(CONF('LANG_DEF') != '')
		{
			$lang = CONF('LANG_DEF');
		}
		else
		{
			$lang = 'DEF';
		}

		//是否指定语言
		if(SESSION('lang') != null)
		{
			$lang = SESSION('lang'); //如果使用了SETLANG($lang)方法，指定了语言
		}
	}

	//约定规则，统一转为大写
	$name = strtoupper(trim($name)); //去掉两边空格，并转为大写
	$lang = strtoupper(trim($lang)); //去掉两边空格，并转为大写

	if($name != '')
	{
		// 语言文件在 ./Lib/lang.php 文件中，如果文件存在，则已经由框架自动载入
		$retval = Lang::$langdata[$name][$lang]; //返回对应的语言值
	}

	return $retval;
}

//设置当前语言，临时改变全局默认语言
function SETLANG($lang='')
{
	$lang = strtoupper(trim($lang)); //去掉两边空格，并转为大写
	if($lang != '')
	{
		SESSION('lang',$lang); //设置为指定语言
	}
}

//取消设置当前语言
function UNSETLANG()
{
	SESSION('lang',null); //清除指定语言设置
}

//**********************************************************

//获得网站根目录的硬盘目录
function SITEROOTDIR()
{
	return $_SERVER['DOCUMENT_ROOT'];
}

//空参数值：获得当前目录的上级目录
//指定参数：获得指定目录的上级目录 路径分隔符需要使用/
function PARENTDIR($dirpath='')
{
	if($dirpath != "")
	{
		return @dirname($dirpath);
	}
	else
	{
		return @dirname($_SERVER['DOCUMENT_ROOT']);
	}
}

//**********************************************************

//获得指定网址源码内容
//$url 要获取内容的网址。http开头
//$getType 获取方式： 默认curl=curl_init()   指定file=file_get_contents()
function GETURL($url='', $getType='curl')
{
	$retval = '';
	if($url != '')
	{
		if($getType == 'curl')
		{
			// 创建一个新cURL资源
			$ch = curl_init();
			// 设置URL和相应的选项
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5); //5秒
			//curl_setopt($curl, CURLOPT_HEADER, false);
			// 抓取URL并把它传递给浏览器
			$retval = curl_exec($ch);
			//echo $data;

			//关闭cURL资源，并且释放系统资源
			curl_close($ch);
		}
		elseif($getType == 'file')
		{
			$retval = @file_get_contents($url);
		}
	}
	return $retval;
}


//给select循环显示option时候，符合value值时候输出selected="true"
//$rowval=每次循环的值     //$isval=显示selected的值
function SELECTDEL($rowval=null, $isval=null)
{
	if($rowval!=null  &&  $rowval==$isval)
	{
		return ' selected="true" ';
	}
}


//判断用户是否有访问 C中A方法 的权限 CURD
//$userName 用户名
//$configDomName config.php中账号储存节点名
//$loginurl 登录页面（用户名空的时候，代表未登录）

/***********config.php中的格式*****************
//后台登录ACTION
'LOGIN_ACTION'		=>	'Login/index', 
//后台管理员账号
'USERSAUTH'		=>	array(
						'zyzadmin1'	=>	array(
									'password'	=>	'96e79218965eb72c92a549dd5a330112',
									'auth'		=>	array('Index/index','List/my'),
								),
						'zyzadmin2'	=>	array(
									'password'	=>	'e3ceb5881a0a1fdaad01296d7554868d',
									'auth'		=>	array('Index/index'),
								),
						),
**********************************************/
function AUTH($userName='',$configDomName='USERSAUTH',$loginurl=''){
	if($loginurl=='' && CONF('LOGIN_ACTION')!='')
	{
		$loginurl = CONF('LOGIN_ACTION');
	}

	if($userName) //管理员登录的情况
	{
		$userslist = CONF($configDomName); //读取当前用户的权限列表
		$oneuser = $userslist[$userName]; //当前用户
		if($oneuser)
		{
			//用户存在，于CONFIG.PHP中
			foreach ($oneuser['auth'] as $key => $isauth) {
				if($isauth == C.'/'.A)
				{
					//有权限
					//echo $auth.' 当前：'.C.'/'.A.'<br/>';
					return ture;
				}
				else
				{
					//没权限
				}
			}
		}
		else
		{
			//用户不存在于CONFIG.PHP中
			//echo '用户不存在于CONFIG.PHP中';
		}
		$message = '无权限'; //CURD
		//TOERROR($message, '', 0, true); //无跳转
		TOERROR($message);
	}
	else
	{
		//没有登录时
		TOERROR('请登录',U($loginurl));
	}
}

//**********************************************************

//**********************************************************